<?php 
class Menu extends AppModel {
    var $name = 'Producto';    
    public $useTable = false;
   
/**
 * Overridden paginate method - group by week, away_team_id and home_team_id
 */
    public function paginate($conditions, $fields, $order, $limit = 5, $page = 1, $recursive = null, $extra = array()) {
        $recursive = -1;
        //$group = $fields = array('a_party');
        //return $this->find('all', compact('conditions', 'fields', 'order', 'limit', 'page', 'recursive', 'group'));

        $results = $this->getDatosListado($conditions);

        $pos_ini = $limit * ($page - 1);
        $pos_actual = 0;
        $entra = 0;
        $resultado_paginado = array();

//        echo 'limit'.$limit;
//        echo 'page'.$page;
//        echo 'posini'.$pos_ini;
//        echo 'pos_actual'.$pos_actual;
        foreach ($results as $value):
            if($pos_actual == $pos_ini) $entra = 1;
            if($pos_actual == ($pos_ini + $limit)) $entra = 0;
            
            if($entra == 1) {
                array_push ($resultado_paginado, $value);
            }
            $pos_actual++;
        endforeach;
        return $resultado_paginado;
    } 
    
    public function paginateCount($conditions = null, $recursive = 0, $extra = array()) {
    // method body
        return count($this->getDatosListado($conditions));
    }
 
    function getDatosListado($condiciones) {    
        $producto = ClassRegistry::init('Producto');
        $agregado = ClassRegistry::init('Agregado');
        $producto->recursive = -1;

        $campos = array('Rubro.codigo', 'Rubro.descripcion', 'Subrubro.codigo', 'Subrubro.descripcion',
                        'Producto.id', 'Producto.codigo', 'Producto.descripcion', 
                        'Producto.precio','Producto.categoria','Producto.activo');
        $joins = array(
                    array('table' => 'subrubros', 'alias' => 'Subrubro', 'type' => 'INNER',
                            'conditions' => array('Subrubro.id = Producto.subrubro_id')),
                    array('table' => 'rubros', 'alias' => 'Rubro', 'type' => 'INNER',
                            'conditions' => array('Rubro.id = Subrubro.rubro_id'))
                    );
        $orden = array('Rubro.codigo ASC', 'Subrubro.codigo ASC', 'Producto.codigo ASC');
//        -- categorias 1: cocina, 2: cafeteria
        
        if (!empty($condiciones['incluye_cocina'])) {
            if ($condiciones['incluye_cocina'] == 1) {
                $filtros = array();
                $filtros['Producto.categoria'] = 1;
                $filtros['Producto.activo'] = 1;

                if(!empty($condiciones['rubro_descripcion']))
                    $filtros['Rubro.descripcion LIKE'] = $condiciones['rubro_descripcion'];               
                if(!empty($condiciones['subrubro_descripcion']))
                    $filtros['Subrubro.descripcion LIKE'] = $condiciones['subrubro_descripcion'];
                if(!empty($condiciones['producto_codigo']))
                    $filtros['Producto.codigo'] = $condiciones['producto_descripcion'];
                if(!empty($condiciones['producto_descripcion']))
                    $filtros['Producto.descripcion LIKE'] = $condiciones['producto_descripcion'];

        // productos de cocina que admitan guarniciones                
                $filtros['Producto.admite_guarniciones'] = 1;
                $filtros['Producto.admite_salsas'] = 0;
                $produtos_1 = $producto->find('all', array('conditions' => $filtros, 'order' => $orden, 'fields' => $campos, 'joins' => $joins));
                
        // productos de cocina que admitan salsas
                $filtros['Producto.admite_guarniciones'] = 0;
                $filtros['Producto.admite_salsas'] = 1;
                $produtos_2 = $producto->find('all', array('conditions' => $filtros, 'order' => $orden, 'fields' => $campos, 'joins' => $joins));
                
        // productos de cocina que admitan guarniciones y salsas
                $filtros['Producto.admite_guarniciones'] = 1;
                $filtros['Producto.admite_salsas'] = 1;
                $produtos_3 = $producto->find('all', array('conditions' => $filtros, 'order' => $orden, 'fields' => $campos, 'joins' => $joins));
                
        // productos de cocina que no admitan ni guarniciones ni salsas
                $filtros['Producto.admite_guarniciones'] = 0;
                $filtros['Producto.admite_salsas'] = 0;
                $produtos_4 = $producto->find('all', array('conditions' => $filtros, 'order' => $orden, 'fields' => $campos, 'joins' => $joins));
            }
        }
        if (!empty($condiciones['incluye_cafeteria'])) {
            if ($condiciones['incluye_cafeteria'] == 1) {
                $filtros = array();
                $filtros['Producto.categoria'] = 2;
                $filtros['Producto.activo'] = 1;

                if(!empty($condiciones['rubro_descripcion']))
                    $filtros['Rubro.descripcion LIKE'] = $condiciones['rubro_descripcion'];               
                if(!empty($condiciones['subrubro_descripcion']))
                    $filtros['Subrubro.descripcion LIKE'] = $condiciones['subrubro_descripcion'];
                if(!empty($condiciones['producto_codigo']))
                    $filtros['Producto.codigo'] = $condiciones['producto_descripcion'];
                if(!empty($condiciones['producto_descripcion']))
                    $filtros['Producto.descripcion LIKE'] = $condiciones['producto_descripcion'];
                
                $produtos_5 = $producto->find('all', array('conditions' => $filtros, 'order' => $orden, 'fields' => $campos, 'joins' => $joins));
            }            
        }

//        -- tipo 1: guarnicion, 2: salsa
        $orden = array('Agregado.codigo ASC');

        // guarniciones
        $filtros = array();
        $filtros['Agregado.tipo'] = 1;
        $guarniciones = $agregado->find('all', array('conditions' => $filtros, 'order' => $orden,
            ));

       
        // salsas
        $filtros = array();
        $filtros['Agregado.tipo'] = 2;
        $salsas = $agregado->find('all', array('conditions' => $filtros, 'order' => $orden));

// armado de listado final con cortes        
        $rubro = null;
        $subrubro = null;
        $resultado = array();
        
// cortes: 1- Categoria; 2- Rubro; 3- Subrubro; 4- Producto; 5-Tipo agregado; 6- Agregado        

        array_push($resultado, array('Codigo' => null,
                                    'Descripcion' => 'COCINA',
                                    'Precio' => null,
                                    'Corte' => 1));
        
        if(!empty($produtos_1)) {
            foreach($produtos_1 as $producto_1):
                if($rubro != $producto_1['Rubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_1['Rubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 2));
                    $rubro = $producto_1['Rubro']['codigo'];
                }
                if($subrubro != $producto_1['Subrubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_1['Subrubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 3));
                    $subrubro = $producto_1['Subrubro']['codigo'];
                }

                array_push($resultado, array('Id' => $producto_1['Producto']['id'],
                                            'Codigo' => $producto_1['Producto']['codigo'],
                                            'Descripcion' => $producto_1['Producto']['descripcion'],
                                            'Precio' => $producto_1['Producto']['precio'],
                                            'Corte' => 4));
            endforeach;

            array_push($resultado, array('Codigo' => null,
                                        'Descripcion' => 'Guarniciones',
                                        'Precio' => null,
                                        'Corte' => 5));
            foreach($guarniciones as $guarnicion):
                array_push($resultado, array('Id' => $guarnicion['Agregado']['id'],
                                            'Codigo' => $guarnicion['Agregado']['codigo'],
                                            'Descripcion' => $guarnicion['Agregado']['descripcion'],
                                            'Precio' => $guarnicion['Agregado']['precio'],
                                            'Corte' => 6));
            endforeach;        
        }

        if(!empty($produtos_2)) {
        
            foreach($produtos_2 as $producto_2):
                if($rubro != $producto_2['Rubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_2['Rubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 2));
                    $rubro = $producto_2['Rubro']['codigo'];
                }
                if($subrubro != $producto_2['Subrubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_2['Subrubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 3));
                    $subrubro = $producto_2['Subrubro']['codigo'];
                }
                array_push($resultado, array('Id' => $producto_2['Producto']['id'],
                                            'Codigo' => $producto_2['Producto']['codigo'],
                                            'Descripcion' => $producto_2['Producto']['descripcion'],
                                            'Precio' => $producto_2['Producto']['precio'],
                                            'Corte' => 4));
            endforeach;

            // salsas
            array_push($resultado, array('Codigo' => null,
                                        'Descripcion' => 'Salsas',
                                        'Precio' => null,
                                        'Corte' => 5));
            foreach($salsas as $salsa):
                array_push($resultado, array('Id' => $salsa['Agregado']['id'],
                                            'Codigo' => $salsa['Agregado']['codigo'],
                                            'Descripcion' => $salsa['Agregado']['descripcion'],
                                            'Precio' => $salsa['Agregado']['precio'],
                                            'Corte' => 6));
            endforeach;        
        }
        
        if(!empty($produtos_3)) {
            foreach($produtos_3 as $producto_3):
                if($rubro != $producto_3['Rubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_3['Rubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 2));
                    $rubro = $producto_3['Rubro']['codigo'];
                }
                if($subrubro != $producto_3['Subrubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_3['Subrubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 3));
                    $subrubro = $producto_3['Subrubro']['codigo'];
                }            
                array_push($resultado, array('Id' => $producto_3['Producto']['id'],
                                            'Codigo' => $producto_3['Producto']['codigo'],
                                            'Descripcion' => $producto_3['Producto']['descripcion'],
                                            'Precio' => $producto_3['Producto']['precio'],
                                            'Corte' => 4));
            endforeach;
        }
        if(empty($produtos_1) && (!empty($produtos_3))) {
            array_push($resultado, array('Codigo' => null,
                                        'Descripcion' => 'Guarniciones',
                                        'Precio' => null,
                                        'Corte' => 5));
            foreach($guarniciones as $guarnicion):
                array_push($resultado, array('Id' => $guarnicion['Agregado']['id'],
                                            'Codigo' => $guarnicion['Agregado']['codigo'],
                                            'Descripcion' => $guarnicion['Agregado']['descripcion'],
                                            'Precio' => $guarnicion['Agregado']['precio'],
                                            'Corte' => 6));
            endforeach;        
        }
        
        if(empty($produtos_2) && (!empty($produtos_3))) {
            array_push($resultado, array('Codigo' => null,
                                        'Descripcion' => 'Salsas',
                                        'Precio' => null,
                                        'Corte' => 5));
            foreach($salsas as $salsa):
                array_push($resultado, array('Id' => $salsa['Agregado']['id'],
                                            'Codigo' => $salsa['Agregado']['codigo'],
                                            'Descripcion' => $salsa['Agregado']['descripcion'],
                                            'Precio' => $salsa['Agregado']['precio'],
                                            'Corte' => 6));
            endforeach;        
        }

        if(!empty($produtos_4)) {
            foreach($produtos_4 as $producto_4):
                if($rubro != $producto_4['Rubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_4['Rubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 2));
                    $rubro = $producto_4['Rubro']['codigo'];
                }
                if($subrubro != $producto_4['Subrubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_4['Subrubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 3));
                    $subrubro = $producto_4['Subrubro']['codigo'];
                }
                array_push($resultado, array('Id' => $producto_4['Producto']['id'],
                                            'Codigo' => $producto_4['Producto']['codigo'],
                                            'Descripcion' => $producto_4['Producto']['descripcion'],
                                            'Precio' => $producto_4['Producto']['precio'],
                                            'Corte' => 4));
            endforeach;
        }
        // cafeteria
        array_push($resultado, array('Codigo' => null,
                                    'Descripcion' => 'CAFETERÍA',
                                    'Precio' => null,
                                    'Corte' => 1));
        
        if(!empty($produtos_5)) {
            foreach($produtos_5 as $producto_5):
                if($rubro != $producto_5['Rubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_5['Rubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 2));
                    $rubro = $producto_5['Rubro']['codigo'];
                }
                if($subrubro != $producto_5['Subrubro']['codigo']) {
                    array_push($resultado, array('Codigo' => null,
                                                'Descripcion' => $producto_5['Subrubro']['descripcion'],
                                                'Precio' => null,
                                                'Corte' => 3));
                    $subrubro = $producto_5['Subrubro']['codigo'];
                }
                array_push($resultado, array('Id' => $producto_5['Producto']['id'],
                                            'Codigo' => $producto_5['Producto']['codigo'],
                                            'Descripcion' => $producto_5['Producto']['descripcion'],
                                            'Precio' => $producto_5['Producto']['precio'],
                                            'Corte' => 4));
            endforeach;
        }
        return $resultado;
    }
    
    
}
?>